package com.gqj.meter.service.impl;

import com.gqj.common.utils.StringUtils;
import com.gqj.meter.domain.*;
import com.gqj.meter.mapper.*;
import com.gqj.meter.service.IMdStoreLocChgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 储位变更记录Service业务层处理
 *
 * @author lxq
 * @date lxq-02-10
 */
@Service
public class MdStoreLocChgServiceImpl implements IMdStoreLocChgService {
    @Autowired
    private MdStoreLocChgMapper mdStoreLocChgMapper;
    @Autowired
    private MdMeterMapper mdMeterMapper;
    @Autowired
    private MdItMapper mdItMapper;
    @Autowired
    private MdLcEquipMapper mdLcEquipMapper;
    @Autowired
    private MdConcentratorMapper mdConcentratorMapper;
    @Autowired
    private MdComModuleMapper mdComModuleMapper;
    @Autowired
    private MdOtherMaterialMapper mdOtherMaterialMapper;

    /**
     * 查询储位变更记录
     *
     * @param chgId 储位变更记录主键
     * @return 储位变更记录
     */
    @Override
    public MdStoreLocChg selectMdStoreLocChgByChgId(Long chgId) {
        return mdStoreLocChgMapper.selectMdStoreLocChgByChgId(chgId);
    }

    /**
     * 查询储位变更记录列表
     *
     * @param mdStoreLocChg 储位变更记录
     * @return 储位变更记录
     */
    @Override
    public List<MdStoreLocChg> selectMdStoreLocChgList(MdStoreLocChg mdStoreLocChg) {
        return mdStoreLocChgMapper.selectMdStoreLocChgList(mdStoreLocChg);
    }

    /**
     * 新增储位变更记录
     *
     * @param mdStoreLocChg 储位变更记录
     * @return 结果
     */
    @Override
    public int insertMdStoreLocChg(MdStoreLocChg mdStoreLocChg) {
        String equipCateg = mdStoreLocChg.getEquipCateg();
        List<String> rfidList = mdStoreLocChg.getRfidList();

        for (String rfid : rfidList) {
            switch (equipCateg) {
                case "01":
                    //查询台账
                    MdMeter mdMeter = mdMeterMapper.selectMdMeterByRfidNo(rfid);

                    if (StringUtils.isNotNull(mdMeter)) {
                        //记录储位变更记录
                        if (null != mdMeter.getStoreLocId()) {
                            mdStoreLocChg.setSrcStoreLocId(mdMeter.getStoreLocId().toString());
                        }
                        mdStoreLocChg.setBarCode(rfid);
                        mdStoreLocChg.setEquipCateg(equipCateg);
                        mdStoreLocChgMapper.insertMdStoreLocChg(mdStoreLocChg);

                        //更改台账位置信息
                        mdMeter.setWhId(mdStoreLocChg.getWhId());
                        mdMeter.setStoreAreaId(mdStoreLocChg.getStoreAreaId());
                        mdMeter.setWhAreaId(mdStoreLocChg.getWhAreaId());
                        mdMeter.setStoreLocId(Long.parseLong(mdStoreLocChg.getStoreLocId()));
                        mdMeterMapper.updateMdMeter(mdMeter);

                    }
                    break;
                case "02":
                    MdIt mdIt = mdItMapper.selectMdItByRfidNo(rfid);
                    //记录储位变更记录
                    if (null != mdIt.getStoreLocId()) {
                        mdStoreLocChg.setSrcStoreLocId(mdIt.getStoreLocId().toString());
                    }
                    mdStoreLocChg.setBarCode(rfid);
                    mdStoreLocChg.setEquipCateg(equipCateg);
                    mdStoreLocChgMapper.insertMdStoreLocChg(mdStoreLocChg);

                    //更改台账位置信息
                    mdIt.setWhId(mdStoreLocChg.getWhId());
                    mdIt.setStoreAreaId(mdStoreLocChg.getStoreAreaId());
                    mdIt.setWhAreaId(mdStoreLocChg.getWhAreaId());
                    mdIt.setStoreLocId(Long.parseLong(mdStoreLocChg.getStoreLocId()));
                    mdItMapper.updateMdIt(mdIt);
                    break;
                case "03":
                    MdLcEquip mdLcEquip = mdLcEquipMapper.selectMdLcEquipByRfidNo(rfid);
                    //记录储位变更记录
                    if (null ==mdLcEquip.getStoreLocId()) {
                    mdStoreLocChg.setSrcStoreLocId(mdLcEquip.getStoreLocId().toString());
                }
                mdStoreLocChg.setBarCode(rfid);
                mdStoreLocChg.setEquipCateg(equipCateg);
                mdStoreLocChgMapper.insertMdStoreLocChg(mdStoreLocChg);

                //更改台账位置信息
                mdLcEquip.setWhId(mdStoreLocChg.getWhId());
                mdLcEquip.setStoreAreaId(mdStoreLocChg.getStoreAreaId());
                mdLcEquip.setWhAreaId(mdStoreLocChg.getWhAreaId());
                mdLcEquip.setStoreLocId(Long.parseLong(mdStoreLocChg.getStoreLocId()));
                mdLcEquipMapper.updateMdLcEquip(mdLcEquip);
                break;
                case "04":
                    MdConcentrator mdConcentrator = mdConcentratorMapper.selectMdConcentratorByRfidNo(rfid);
                    //记录储位变更记录
                    if (null != mdConcentrator.getStoreLocId()) {
                        mdStoreLocChg.setSrcStoreLocId(mdConcentrator.getStoreLocId().toString());
                    }
                    mdStoreLocChg.setBarCode(rfid);
                    mdStoreLocChg.setEquipCateg(equipCateg);
                    mdStoreLocChgMapper.insertMdStoreLocChg(mdStoreLocChg);

                    //更改台账位置信息
                    mdConcentrator.setWhId(mdStoreLocChg.getWhId());
                    mdConcentrator.setStoreAreaId(mdStoreLocChg.getStoreAreaId());
                    mdConcentrator.setWhAreaId(mdStoreLocChg.getWhAreaId());
                    mdConcentrator.setStoreLocId(Long.parseLong(mdStoreLocChg.getStoreLocId()));
                    mdConcentratorMapper.updateMdConcentrator(mdConcentrator);
                    break;
                case "05":
                    MdComModule mdComModule = mdComModuleMapper.selectMdComModuleByRfidNo(rfid);
                    //记录储位变更记录
                    if (null != mdComModule.getStoreLocId()) {
                        mdStoreLocChg.setSrcStoreLocId(mdComModule.getStoreLocId().toString());
                    }
                    mdStoreLocChg.setBarCode(rfid);
                    mdStoreLocChg.setEquipCateg(equipCateg);
                    mdStoreLocChgMapper.insertMdStoreLocChg(mdStoreLocChg);

                    //更改台账位置信息
                    mdComModule.setWhId(mdStoreLocChg.getWhId());
                    mdComModule.setStoreAreaId(mdStoreLocChg.getStoreAreaId());
                    mdComModule.setWhAreaId(mdStoreLocChg.getWhAreaId());
                    mdComModule.setStoreLocId(Long.parseLong(mdStoreLocChg.getStoreLocId()));
                    mdComModuleMapper.updateMdComModule(mdComModule);
                    break;
                case "10":
                    MdOtherMaterial mdOtherMaterial = mdOtherMaterialMapper.selectMdOtherMaterialByBarCode(rfid);
                    //记录储位变更记录

                    if (null != mdOtherMaterial.getStoreLocId()) {
                        mdStoreLocChg.setSrcStoreLocId(mdOtherMaterial.getStoreLocId().toString());
                    }
                    mdStoreLocChg.setBarCode(rfid);
                    mdStoreLocChg.setEquipCateg(equipCateg);
                    mdStoreLocChgMapper.insertMdStoreLocChg(mdStoreLocChg);

                    //更改台账位置信息
                    mdOtherMaterial.setWhId(mdStoreLocChg.getWhId());
                    mdOtherMaterial.setStoreAreaId(mdStoreLocChg.getStoreAreaId());
                    mdOtherMaterial.setWhAreaId(mdStoreLocChg.getWhAreaId());
                    mdOtherMaterial.setStoreLocId(Long.parseLong(mdStoreLocChg.getStoreLocId()));
                    mdOtherMaterialMapper.updateMdOtherMaterial(mdOtherMaterial);
                    break;
            }

        }
        return 1;
    }

    /**
     * 修改储位变更记录
     *
     * @param mdStoreLocChg 储位变更记录
     * @return 结果
     */
    @Override
    public int updateMdStoreLocChg(MdStoreLocChg mdStoreLocChg) {
        return mdStoreLocChgMapper.updateMdStoreLocChg(mdStoreLocChg);
    }

    /**
     * 批量删除储位变更记录
     *
     * @param chgIds 需要删除的储位变更记录主键
     * @return 结果
     */
    @Override
    public int deleteMdStoreLocChgByChgIds(Long[] chgIds) {
        return mdStoreLocChgMapper.deleteMdStoreLocChgByChgIds(chgIds);
    }

    /**
     * 删除储位变更记录信息
     *
     * @param chgId 储位变更记录主键
     * @return 结果
     */
    @Override
    public int deleteMdStoreLocChgByChgId(Long chgId) {
        return mdStoreLocChgMapper.deleteMdStoreLocChgByChgId(chgId);
    }
}
